package theorie;

public class Automat{
  private static String regeln;
  private static String start;     //wird beim Programmstart ermittelt
  private static String fang=",,,";//ein Nicht-Endzustand, aus dem man nicht mehr entkommt

  public static void main(String[] args){
    if(args.length!=2){
      System.out.println("Aufruf: java Automat regeln wort\n");
      System.out.println("Beispiel zum Test auf geradzahlig viele a:\n"+
        "    java Automat ._S,a,q1.q1,a,_S. aaa"
        +"\nDer Punkt . steht am Anfang und Ende und zwischen allen Regeln. Jede"
        +"\nRegel enthält durch Komma getrennt: VorherZustand, gelesenes Zeichen"
        +"\nund Nachherzustand. Leerzeichen sind in den Regeln nicht erlaubt."
        +"\nZustandsnamen, die mit _ beginnen, sind Endzustände; z.B. können _Z1"
        +"\nund Z1 völlig unabhängig voneinander im gleichen Automaten vorkommen."
        +"\nDer erste erwähnte Zustand wird als der Startzustand interpretiert.");
      System.exit(-1);
    }
    regeln=args[0];
    start=regeln.substring(1,regeln.indexOf(','));
    if(akzeptiert(args[1])) System.out.println("akzeptiert");
    else System.out.println("ABGELEHNT");
  }

  public static boolean akzeptiert(String wort){
    String z=start;
    for(int i=0; i<wort.length(); ++i)
      z=delta(z, wort.charAt(i));
    return z.startsWith("_");
  }

  public static String delta(String vorher, char c){
    String s="."+vorher+","+c+",";
    int wo=regeln.indexOf(s);
    if(wo<0) return fang;
    wo+=s.length();
    int end=regeln.indexOf(".", wo);
    s=regeln.substring(wo,end);
    return s;
  }
}
